library(ggplot2)
library(sf)
library(rnaturalearth)
library(rnaturalearthdata)
library(gridExtra) # Carregue o pacote gridExtra

# Dados dos países e número de artigos
dados <- data.frame(
  country = c("United States", "United Kingdom", "Germany", "Italy", "China", "India", "Japan", "Slovenia", "Netherlands"),
  articles = c(6, 5, 5, 3, 3, 2, 1, 1, 1)
)

# Obtenha um mapa do mundo
world <- ne_countries(scale = "medium", returnclass = "sf")

# Junte os dados com o mapa
world_data <- merge(world, dados, by.x = "name", by.y = "country", all.x = TRUE)

# Ordene os dados pela coluna 'articles' para que a legenda seja ordenada
world_data <- world_data[order(world_data$articles), ]

# Combine o nome do país e o número de artigos em uma nova coluna para a legenda
world_data$label <- with(world_data, ifelse(!is.na(articles), paste(name, "(", articles, ")", sep=""), NA))

# Converta a coluna 'label' para um fator com os níveis na ordem desejada
world_data$label <- factor(world_data$label, levels = unique(world_data$label))

# Gere o mapa com ggplot usando a nova coluna para a legenda
mapa <- ggplot(data = world_data) +
  geom_sf(aes(fill = label), color = "white", size = 0.1) +
  scale_fill_manual(values = setNames(viridis::viridis(length(unique(world_data$label))), unique(world_data$label)), na.value = "black", name = "") +
  theme_minimal() +
  theme(legend.position = "bottom",
        plot.background = element_blank(),
        panel.grid = element_blank(),
        panel.border = element_blank(),
        axis.text = element_blank(),
        axis.ticks = element_blank(),
        axis.title = element_blank(),
        legend.text = element_text(size = 8)) +
  labs(title = "")

# Crie uma tabela com os dados
tabela <- gridExtra::tableGrob(dados[order(dados$articles), ], rows = NULL) # Ordena a tabela também

# Combine o mapa e a tabela
grid.arrange(mapa)

# Salve o mapa e a tabela combinados como uma imagem
ggsave("mapa_artigos.png", arrangeGrob(mapa), width = 16, height = 8, dpi = 300)
